﻿//  Copyright 2020 Google Inc. All Rights Reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.

using System.Runtime.InteropServices;

namespace NtApiDotNet.IO.UsnJournal
{
    [StructLayout(LayoutKind.Sequential)]
    internal struct USN_RECORD_COMMON_HEADER
    {
        public int RecordLength;
        public ushort MajorVersion;
        public ushort MinorVersion;
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct USN_RECORD_V2
    {
        public USN_RECORD_COMMON_HEADER Header;
        public long FileReferenceNumber;
        public long ParentFileReferenceNumber;
        public ulong Usn;
        public LargeIntegerStruct TimeStamp;
        public UsnJournalReasonFlags Reason;
        public UsnJournalSourceInfoFlags SourceInfo;
        public int SecurityId;
        public FileAttributes FileAttributes;
        public ushort FileNameLength;
        public ushort FileNameOffset;
        public ushort FileName;
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct USN_JOURNAL_DATA_V0
    {
        public ulong UsnJournalID;
        public ulong FirstUsn;
        public ulong NextUsn;
        public ulong LowestValidUsn;
        public ulong MaxUsn;
        public long MaximumSize;
        public long AllocationDelta;
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct READ_USN_JOURNAL_DATA_V0
    {
        public ulong StartUsn;
        public UsnJournalReasonFlags ReasonMask;
        public int ReturnOnlyOnClose;
        public ulong Timeout;
        public ulong BytesToWaitFor;
        public ulong UsnJournalID;
    }
}
